/**
 * 轮播图管理服务模块
 *
 * 处理轮播图相关的数据操作逻辑
 */
const { Banner } = require("../models");

class BannerService {
  static async getAllBanners(show) {
    // 构建查询条件
    const whereCondition = {};
    if (show !== undefined) {
      whereCondition.show = show ? 1 : 0;
    }

    // 获取所有轮播图，从数据库中查询
    const banners = await Banner.findAll({
      where: whereCondition,
      order: [
        ["sortOrder", "ASC"], // 按排序字段升序排列
        ["id", "ASC"],
      ],
    });
    return banners;
  }

  static async getBannerById(bannerId) {
    return await Banner.findByPk(bannerId);
  }

  static async createBanner(bannerData) {
    // 创建轮播图
    return await Banner.create(bannerData);
  }

  static async updateBanner(banner) {
    // 验证轮播图ID是否存在
    if (!banner.id) {
      throw new Error("缺少轮播图ID，无法更新轮播图");
    }

    // 构建更新数据对象
    const updateData = {};

    // 只更新允许的字段，并跳过 undefined 值
    const allowedFields = [
      'imgUrl',
      'title',
      'targetUrl',
      'sortOrder',
      'show'
    ];

    // 复制允许的字段
    for (const field of allowedFields) {
      if (banner[field] !== undefined) {
        updateData[field] = banner[field];
      }
    }

    // 执行更新操作
    await Banner.update(updateData, { where: { id: banner.id } });

    // 返回更新后的轮播图
    return await Banner.findByPk(banner.id);
  }

  static async deleteBannerById(id) {
    if(!id) {
      throw new Error("缺少轮播图ID，无法删除轮播图");
    }
    
    // 删除轮播图
    await Banner.destroy({ where: { id } });
  }
}

module.exports = BannerService;